package com.qf.intecepter;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyIntercepter implements HandlerInterceptor {
    /*
        在请求到达处理器之前执行（相当于写在try最前面）
        方法的返回值，表示是否拦截请求：
            如果返回true，表示不拦截
            如果返回false，表示拦截

        需求：访问参数中，name参数的值为zhangsan，不拦截，否则拦截
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle");

        String name = request.getParameter("name");
        if ("zhangsan".equals(name)){
            return true;
        }

        return false;
    }

    /*
        在请求到达处理器之后。当处理器方法正常执行时，才会执行（相当于写在try最后）
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle");
    }

    /*
        在处理器方法执行完之后执行，不管处理器方法是否正常执行，都会执行（相当于写在finally中）
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion");
    }
}
